package com.eastfair.pay.entity;

import cn.afterturn.easypoi.excel.annotation.Excel;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.eastfair.annotation.model.EchoVO;
import com.eastfair.core.base.entity.Entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;

import javax.validation.constraints.Size;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;

import static com.baomidou.mybatisplus.annotation.SqlCondition.LIKE;
import static com.eastfair.core.utils.DateUtils.DEFAULT_DATE_TIME_FORMAT;

/**
 * <p>
 * 实体类
 * 付款计划
 * </p>
 *
 * @author clm
 * @since 2022-06-08
 */
@Data
@NoArgsConstructor
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("pay_payment_plan")
@ApiModel(value = "PaymentPlan", description = "付款计划")
@AllArgsConstructor
public class PaymentPlan extends Entity<Long> implements EchoVO {

    private static final long serialVersionUID = 1L;
    @TableField(exist = false)
    private Map<String, Object> echoMap = new HashMap<>();
    /**
     * 是否启用：1是；0否
     */
    @ApiModelProperty(value = "是否启用：1是；0否")
    @TableField(value = "is_enabled")
    @Excel(name = "是否启用：1是；0否")
    private Integer isEnabled;

    /**
     * 是否删除：1是；0否
     */
    @ApiModelProperty(value = "是否删除：1是；0否")
    @TableField(value = "is_deleted")
    @Excel(name = "是否删除：1是；0否")
    private Integer isDeleted;

    /**
     * 项目id
     */
    @ApiModelProperty(value = "项目id")
    @TableField(value = "project_id")
    @Excel(name = "项目id")
    private Long projectId;

    /**
     * 子系统id
     */
    @ApiModelProperty(value = "子系统id")
    @TableField(value = "subsystem_id")
    @Excel(name = "子系统id")
    private Long subsystemId;

    /**
     * 租户id
     */
    @ApiModelProperty(value = "租户id")
    @TableField(value = "tenant_id")
    @Excel(name = "租户id")
    private Long tenantId;

    /**
     * 业务合同id
     */
    @ApiModelProperty(value = "业务合同id")
    @TableField(value = "business_id")
    @Excel(name = "业务合同id")
    private Long businessId;

    /**
     * 业务数据名称（合同名称）
     */
    @TableField(value = "business_name")
    private String businessName;

    /**
     * 系统code
     */
    @ApiModelProperty(value = "系统code")
    @Size(max = 20, message = "系统code长度不能超过20")
    @TableField(value = "system_code", condition = LIKE)
    @Excel(name = "系统code")
    private String systemCode;

    /**
     * 计划付款时间
     */
    @ApiModelProperty(value = "计划付款时间")
    @TableField(value = "plan_pay_time")
    @Excel(name = "计划付款时间", format = DEFAULT_DATE_TIME_FORMAT, width = 20)
    private LocalDateTime planPayTime;

    /**
     * 计划付款百分比(百分比*100)
     */
    @ApiModelProperty(value = "计划付款百分比")
    @TableField(value = "percent")
    @Excel(name = "计划付款百分比")
    private String percent;

    /**
     * 计划回款金额
     */
    @ApiModelProperty(value = "计划回款金额")
    @TableField(value = "plan_pay_amount")
    @Excel(name = "计划回款金额")
    private BigDecimal planPayAmount;

    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    @Size(max = 255, message = "备注长度不能超过255")
    @TableField(value = "remark", condition = LIKE)
    @Excel(name = "备注")
    private String remark;

    /**
     * 展会id
     */
    @ApiModelProperty(value = "展会id")
    @TableField(value = "exhibition_id")
    @Excel(name = "展会id")
    private Long exhibitionId;

    /**
     * 展会名称
     */
    @ApiModelProperty(value = "展会名称")
    @Size(max = 255, message = "展会名称长度不能超过255")
    @TableField(value = "exhibition_name", condition = LIKE)
    @Excel(name = "展会名称")
    private String exhibitionName;

    /**
     * 已付金额
     */
    @ApiModelProperty(value = "已付金额")
    @TableField(value = "payed_amount")
    @Excel(name = "已付金额")
    private BigDecimal payedAmount;

    /**
     * 付款状态 1 未支付 2 部分支付  2已支付 3已逾期
     */
    @ApiModelProperty(value = "付款状态")
    @TableField(value = "pay_state")
    @Excel(name = "付款状态")
    private String payState;

    /**
     * 分期期数(第一期)
     */
    @ApiModelProperty(value = "分期期数(第一期)")
    @Size(max = 255, message = "分期期数(第一期)长度不能超过255")
    @TableField(value = "stages_tag", condition = LIKE)
    @Excel(name = "分期期数(第一期)")
    private String stagesTag;


    @Builder
    public PaymentPlan(Long id, Long createdBy, LocalDateTime createTime, Long updatedBy, LocalDateTime updateTime, 
                    Integer isEnabled, Integer isDeleted, Long projectId, Long subsystemId, Long tenantId, 
                    Long businessId, String systemCode, LocalDateTime planPayTime, String percent, BigDecimal planPayAmount, String remark,
                    Long exhibitionId, String exhibitionName, BigDecimal payedAmount, String payState, String stagesTag) {
        this.id = id;
        this.createdBy = createdBy;
        this.createTime = createTime;
        this.updatedBy = updatedBy;
        this.updateTime = updateTime;
        this.isEnabled = isEnabled;
        this.isDeleted = isDeleted;
        this.projectId = projectId;
        this.subsystemId = subsystemId;
        this.tenantId = tenantId;
        this.businessId = businessId;
        this.systemCode = systemCode;
        this.planPayTime = planPayTime;
        this.percent = percent;
        this.planPayAmount = planPayAmount;
        this.remark = remark;
        this.exhibitionId = exhibitionId;
        this.exhibitionName = exhibitionName;
        this.payedAmount = payedAmount;
        this.payState = payState;
        this.stagesTag = stagesTag;
    }

}
